package io.github.pigmesh.ai.deepseek.core;


import io.github.pigmesh.ai.deepseek.core.search.SearchResponse;

import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Objects;
import java.util.stream.Collectors;

public class Utils {

    static RuntimeException toException(retrofit2.Response<?> response) throws IOException {
        return new OpenAiHttpException(response.code(), response.errorBody().string());
    }

    static RuntimeException toException(okhttp3.Response response) throws IOException {
        return new OpenAiHttpException(response.code(), response.body().string());
    }

    static <T> T getOrDefault(T value, T defaultValue) {
        return value != null ? value : defaultValue;
    }

    public static String format(String user, SearchResponse.Value[] values) {
        if (Objects.isNull(values) || values.length == 0) {
            return null;
        }

        // 获取当前日期
        LocalDate today = LocalDate.now();

        // 格式化为中文日期格式（yyyy年MM月dd日）
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        String formattedDate = today.format(formatter);


        String results = Arrays
                .stream(values).map(
                        organicResult -> "Title: " + organicResult.getName() + "\n"
                                + (organicResult.getSummary() != null ? "Content:" + "\n" + organicResult.getSummary()
                                : "Snippet:" + "\n" + organicResult.getSnippet()))
                .collect(Collectors.joining("\n\n"));


        return String.format("# 以下 内容是基于用户发送的消息的搜索结果:\n%s\n在回答时，请注意以下几点：\n" +
                        "        - 今天是%s。\n" +
                        "        - 并非搜索结果的所有内容都与用户的问题密切相关，你需要结合问题，对搜索结果进行甄别、筛选。\n" +
                        "        - 优先提供信息完整、最相关的列举项；如非必要，不要主动告诉用户搜索结果未提供的内容。\n" +
                        "        - 如果回答很长，请尽量结构化、分段落总结。如果需要分点作答，尽量控制在5个点以内，并合并相关的内容。\n" +
                        "        - 对于客观类的问答，如果问题的答案非常简短，可以适当补充一到两句相关信息，以丰富内容。\n" +
                        "        - 你需要根据用户要求和回答内容选择合适、美观的回答格式，确保可读性强。\n" +
                        "        - 你的回答应该综合多个相关网页来回答，不能重复引用一个网页，但是不要再回答中提到引用页面。\n" +
                        "       # 用户消息为： %s",
                results,
                formattedDate,
                user);
    }

}
